本篇文章同步發布於 為什麼要用類別 (Class) 包裝處理 Excel 的程式碼?有什麼優點?【Python 處理 Excel #26】
學 Python 的 pandas 和 openpyxl 的初期都是慢慢摸索,想要什麼功能就去查那個功能怎麼用程式碼表現,到了後期專案的程式碼越寫越多,翻查修改程式碼就變得不太方便,如果能透過 Python 的類別 (Class) 將不同目的但相關聯的程式碼分開,再利用類別串接在一起,不僅提高程式碼的可讀性,後續要對程式碼進行增修也容易許多。這篇文章分享為什麼要用類別 (Class) 包裝處理 Excel 的程式碼?使用類別的優點?
使用類別通常能帶來以下好處:
這次《Python 處理 Excel》系列文介紹許多使用 openpyxl 輸出 Excel 檔案的技巧,例如單純輸出 Excel 檔案、新增/複製/刪除工作表、設定 Excel 儲存格樣式、格式化為表格、群組欄位、凍結視窗等等,這一個又一個的功能在之前的文章中常以單獨的函數出現在程式碼案例,但它們都可以集合放在一個名稱類似 ExcelDataExporter 或 ExcelManager 的類別底下,變成該類別的方法。
下方是把處理 Excel 的 Python 程式碼放在 ExcelDataExporter
類別中管理的例子:
import pandas as pd
import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.worksheet.table import Table, TableStyleInfo
class ExcelDataExporter:
def __init__(self, output_filename):
"""初始化 ExcelDataExporter,建立活頁簿和工作表"""
self.output_filename = output_filename
self.workbook = openpyxl.Workbook() # 建立新的活頁簿
self.worksheet = self.workbook.active # 取得當前活躍的工作表
self.worksheet.title = "Orders" # 設定工作表名稱
def add_data(self, data):
"""將數增加加到工作表中"""
for row in data:
self.worksheet.append(row) # 將每一列數據增加到工作表
def save(self):
"""儲存 Excel 檔案"""
self.workbook.save(self.output_filename) # 儲存到指定的檔案位置
def add_sheet(self, sheet_name):
"""新增工作表"""
self.workbook.create_sheet(title=sheet_name)
def copy_sheet(self, source_sheet_name, new_sheet_name):
"""複製工作表"""
source = self.workbook[source_sheet_name]
new_sheet = self.workbook.copy_worksheet(source)
new_sheet.title = new_sheet_name
def delete_sheet(self, sheet_name):
"""刪除工作表"""
del self.workbook[sheet_name]
def set_cell_style(self, cell, font=None, fill=None, border=None):
"""設定儲存格樣式"""
if font:
cell.font = font
if fill:
cell.fill = fill
if border:
cell.border = border
def freeze_panes(self, cell):
"""凍結視窗"""
self.worksheet.freeze_panes = cell # 凍結指定的儲存格上方和左側的區域
ExcelDataExporter
是專門用於操作和格式化 Excel 檔案的類別,類別內包含許多方法讓使用者建立、編輯和儲存 Excel 活頁簿,具體功能包括:
下方程式碼舉例如何在程式碼中使用先前建立的 ExcelDataExporter 類別:
exporter = ExcelDataExporter("styled_example.xlsx")
# 新增數據
data = [
['Product', 'Sales'],
['A', 100],
['B', 150],
]
exporter.add_data(data) # 增加數據到工作表
# 新增一個新的工作表
exporter.add_sheet("Summary")
# 複製現有的工作表
exporter.copy_sheet("Orders", "Orders_Copy")
# 刪除一個工作表 (如果需要)
# exporter.delete_sheet("Summary")
# 設定儲存格樣式,例如:設置標題列的字體為粗體
font = openpyxl.styles.Font(bold=True)
for cell in exporter.worksheet[1]:
exporter.set_cell_style(cell, font=font)
# 凍結第一列 (標題列)
exporter.freeze_panes("A2")
# 儲存 Excel 檔案
exporter.save()
當有了 ExcelDataExporter
類別,在程式其他地方對於 Excel 檔案的操作變得更簡單直觀,開發時就可以專注處理數據內容,不必擔心用 Python 輸出 Excel 檔案的底層實作細節。
使用類別包裝處理 Excel 的程式碼除了提高程式碼的可讀性和可維護性,還為程式專案的架構保留擴增的彈性。透過把相關功能的程式碼組織在同一個類別,能建立更加模組化、可重複使用的程式架構,如此一來不僅幫助自己管理程式碼,也讓其他人更容易理解與使用已經撰寫好的類別,進而促進團隊合作,提升工作時的效率。
本篇文章同步發布於 為什麼要用類別 (Class) 包裝處理 Excel 的程式碼?有什麼優點?【Python 處理 Excel #26】